package com.atguigu.lease.web.admin.schedule;

import com.atguigu.lease.model.entity.LeaseAgreement;
import com.atguigu.lease.model.enums.ItemType;
import com.atguigu.lease.model.enums.LeaseStatus;
import com.atguigu.lease.web.admin.service.LeaseAgreementService;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * ClassName: ScheduleTasks
 * Package: com.atguigu.lease.web.admin.schedule
 * Description:
 *
 * @Author: tiantian
 * @Create: 2024/10/8 - 11:04
 * @Version: v1.0
 */
//将这个类放入ioc容器中
@Component
public class ScheduleTasks {
    //编写定时任务
    //@Scheduled：这个注解的作用，是这个方法定时的执行
    //cron：希腊语的一个单词，时间（传入的值是一个sron表达式）
    //每秒执行一次（六个*就可以了）
//    @Scheduled(cron = "* * * * * *")
//    public void test(){
//        //每秒打印一次时间
//        System.out.println(new Date());
//    }

    @Autowired
    private LeaseAgreementService leaseAgreementService;

    //注意：每一个字段都要有空格（每天的零时零分零秒执行）
    @Scheduled(cron = "0 0 0 * * *")
    public void checkLeaseStatus(){
        //逻辑：租约的结束日期和当前日期比较下，就知道租约是否到期了
        //结束日期 小于等于 当前日期，意味着租约到期了（到期就改成已到期）
        LambdaUpdateWrapper<LeaseAgreement> leaseAgreementLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
        //le：小于等于
        leaseAgreementLambdaUpdateWrapper.le(LeaseAgreement::getLeaseEndDate, new Date());
        //	注意：如果数据库中存在一些已经取消的，退租的历史租约，他们的结束日期也满足这个条件，不应该修改
        //在租状态是包括两个状态的
        leaseAgreementLambdaUpdateWrapper.in(LeaseAgreement::getStatus, LeaseStatus.SIGNED, LeaseStatus.WITHDRAWING);
        leaseAgreementLambdaUpdateWrapper.set(LeaseAgreement::getStatus, LeaseStatus.EXPIRED);
        leaseAgreementService.update(leaseAgreementLambdaUpdateWrapper);
    }
}
